
angular.module('smartOlwApp').controller('sedeCtrl', function($scope,ngDialog,smartOlwServices){

	$scope.titulo_mensajes 			= "Información!";
	$scope.descripcion_mensajes  	= "En esta vista puede administrar las sedes";

	var divMessages  				= document.querySelector('#messageBox');
	divMessages.className 			= "alert alert-info alert-dismissable";
	$scope.lista 					= {departamento: []};
	
	$scope.paises 					= [];
	$scope.departamentos 			= [];
	$scope.ciudades				 	= [];
	$scope.instituciones			= [];
	$scope.sedes					= [];

	$scope.showModal 				= function() {
		var dialog 	 				= ngDialog.open({
			template: '<div>'+
			'   <p>En esta vista, puede crear nuevos departamentos, teniendo en cuenta los siguientes aspectos:</p>' +
			'   <p>' + 
			'     <ul style="list-style-type:circle;margin-left:10px;">'  +
			'        <li>Los campos con signo *, son obligatorios, se deben diligenciar.</li>' +
			'     </ul>' +
			'   </p>' + 
			'</div>'+
			'<div class="ngdialog-buttons">'+
			'<button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog(1)">Cerrar</button>' +
			'</div>',
			className: 'ngdialog-theme-default',
			plain: true
		});
		dialog.closePromise.then(function (data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};

	$scope.filterValue 					= function($event){
		if(isNaN(String.fromCharCode($event.keyCode))){
			$event.preventDefault();
		}
	};

	$scope.grabar 						= function(sede) {
		smartOlwServices.validateInfo(
			sede,
			function(sede) {
				return (sede != null);
			},
			function(sede) {
				try {
					var exito 							= function(respuesta){
						try{
							var response 				= respuesta.data; 
							$scope.titulo_mensajes 		= response.codigo === 400 ? "Error!":"Información!";
							$scope.descripcion_mensajes = response.mensaje;
							divMessages.className 		= response.codigo === 400 ? "alert alert-danger alert-dismissable": "alert alert-info alert-dismissable";
						}catch(e){
							console.log(e.message);
						}
					};
					var error 							= function(respuesta){
						$scope.titulo_mensajes 			= "Error!";
						$scope.descripcion_mensajes  	= "Se produjo un error al grabar la sede ";
						divMessages.className 			= "alert alert-danger alert-dismissable";
					};
					
					var sedeObj 						= angular.copy(sede);
						sedeObj.smCousuario 			= userSession;
					var smScciudad						= (sedeObj != null)?sedeObj.smScciudad:null;
					var smartInstitucion				= (sedeObj != null)?sedeObj.smartInstitucion:null;
					var smartSedeTipoUbicacion			= (sedeObj != null)?sedeObj.smartSedeTipoUbicacion:null;
					var smartSedeTipoZona				= (sedeObj != null)?sedeObj.smartSedeTipoZona:null;
					
					 if(smartSedeTipoUbicacion != null) {
					    smartSedeTipoUbicacion			= $scope.buscarElemento(
					    	smartSedeTipoUbicacion.scdatmestro, 
					    	$scope.tipoUbicacion
					    );
					    sedeObj.smartSedeTipoUbicacion 	= smartSedeTipoUbicacion;
					 }
					 if(smartSedeTipoZona != null) {
					    smartSedeTipoZona				= $scope.buscarElemento(
					    	smartSedeTipoZona.scdatmestro, 
					    	$scope.tipoZona
					    );
					    sedeObj.smartSedeTipoZona 		= smartSedeTipoZona;
					 }
					 if(smScciudad != null) {
					    smScciudad						= $scope.buscarCiudad(smScciudad);
					    smScciudad						= $scope.ciudades[smScciudad];
					    sedeObj.smScciudad 				= smScciudad;
					 }
					 if(smartInstitucion != null) {
					    smartInstitucion				= $scope.buscarInstitucion(smartInstitucion);
					    smartInstitucion				= $scope.instituciones[smartInstitucion];
					    sedeObj.smartInstitucion 		= smartInstitucion;
					 }
					
					if(sedeObj.scsede != null && sedeObj.scsede != undefined) {
						smartOlwServices.sendPut(
							angular.toJson(sedeObj),
							hostSmart+context+endPointSede+methodEditSede,
							exito,
							error);
					}
					else {
						smartOlwServices.sendPut(
							angular.toJson(sedeObj),
							hostSmart+context+endPointSede+methodSetSede,
							exito,
							error);
					}

				} catch (e) {
					$scope.titulo_mensajes 			= "Error!";
					$scope.descripcion_mensajes  	= "Se produjo un error al grabar la sede";
					divMessages.className 			= "alert alert-danger alert-dismissable";
				}
			},
			function() {
				$scope.titulo_mensajes 			= "Alerta!";
				$scope.descripcion_mensajes  	= "Ingrese los valores obligatorios ";
				divMessages.className 			= "alert alert-danger alert-dismissable";
			}
		);
	};

	$scope.consultar 							= function(sede) {
		try {
			var exito 							= function(respuesta) {
			   var lista						= angular.fromJson(respuesta.data);
			   	   $scope.sedes 				= lista;
				if($scope.sedes != null && $scope.sedes.length > 0) {
				   $scope.descripcion_mensajes  = "Tenemos " + $scope.sedes.length + " sedes";
				}
				else {
				   $scope.titulo_mensajes 		= "Información!";
				   $scope.descripcion_mensajes 	= "No hay sedes registradas";	
				}
				divMessages.className 			= "alert alert-success alert-dismissable";
			};
			
			var error 							= function(respuesta) {
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar sedes";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			sede								= (sede == null)?{}:sede;
			var smartSedeTipoUbicacion			= (sede != null)?sede.smartSedeTipoUbicacion:null;
			var smartSedeTipoZona				= (sede != null)?sede.smartSedeTipoZona:null;
			var smartInstitucion				= (sede != null)?sede.smartInstitucion:null;
			var smScciudad						= (sede != null)?sede.smScciudad:null;
			
			var vsmartSedeTipoUbicacion			= smartSedeTipoUbicacion;
			var vsmartSedeTipoZona				= smartSedeTipoZona;
			var vsmartInstitucion				= smartInstitucion;
			var vsmScciudad						= smScciudad;
		
			if(smartSedeTipoUbicacion != null) {
			   smartSedeTipoUbicacion			= $scope.buscarElemento(smartSedeTipoUbicacion.scdatmestro, $scope.tipoUbicacion);
			   sede.smartSedeTipoUbicacion 		= smartSedeTipoUbicacion;
			}
			if(smartSedeTipoZona != null) {
			   smartSedeTipoZona				= $scope.buscarElemento(smartSedeTipoZona.scdatmestro, $scope.tipoZona);
			   sede.smartSedeTipoZona 			= smartSedeTipoZona;
			}
			if(smartInstitucion != null) {
			   smartInstitucion					= $scope.buscarInstitucion(smartInstitucion);
			   smartInstitucion					= $scope.instituciones[smartInstitucion];
			   sede.smartInstitucion 			= smartInstitucion;
			}
			if(smScciudad != null) {
			   smScciudad						= $scope.buscarCiudad(smScciudad);
			   smScciudad						= $scope.ciudades[smScciudad];
			   sede.smScciudad 					= smScciudad;
			}
			
			smartOlwServices.sendPost(
				angular.toJson(sede),
				hostSmart+context+endPointSede+methodGetSede,exito,error
			);
			
			sede.smartSedeTipoUbicacion			= vsmartSedeTipoUbicacion;
			sede.smartSedeTipoZona				= vsmartSedeTipoZona;
			sede.smartInstitucion				= vsmartInstitucion;
			sede.smScciudad						= vsmScciudad;
		}
		catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar sedes";
			divMessages.className 			= "alert alert-danger alert-dismissable";
			console.log(e);
		}
	};
	
	$scope.eliminar 					= function(sede) {

	};

	$scope.seleccionar 					= function(sede){
		$scope.sede 						= angular.copy(sede);
		$scope.pais							= sede.smScciudad.departamentodto.scpais.scpais;
		$scope.cargarDepartamentos($scope.pais);
		$scope.departamento					= sede.smScciudad.departamentodto.scdepartamento;
		$scope.cargarCiudades($scope.departamento);
		$scope.sede.smScciudad				= sede.smScciudad.scciudad;
		$scope.cargarInstitucion(
			$scope.sede.smScciudad,
			function(scope) {
				scope.sede.smartInstitucion	= sede.smartInstitucion.scinstitucion;
			});
		
		$scope.sede.smartSedeTipoUbicacion	= sede.smartSedeTipoUbicacion.scdatmestro;
		$scope.sede.smartSedeTipoZona		= sede.smartSedeTipoZona.scdatmestro;
	};

	$scope.limpiar 						= function(sede){
		if(sede != null && sede.scsede != undefined) {
		   sede.scsede					= null;
		}
		if(sede != null && sede.smartInstitucion != undefined) {
		   sede.smartInstitucion		= null;
		}
		if(sede != null && sede.smCosede != undefined) {
		   sede.smCosede				= null;
		}
		if(sede != null && sede.smDssede != undefined) {
		   sede.smDssede				= null;
		}
		if(sede != null && sede.smartSedeTipoZona != undefined) {
		   sede.smartSedeTipoZona		= null;
		}
		if(sede != null && sede.smartSedeTipoUbicacion != undefined) {
		   sede.smartSedeTipoUbicacion	= null;
		}
		if(sede != null && sede.smDstelefono != undefined) {
		   sede.smDstelefono			= null;
		}
		if(sede != null && sede.smDscelular != undefined) {
		   sede.smDscelular				= null;
		}
		if(sede != null && sede.smDsemail != undefined) {
		   sede.smDsemail				= null;
		}
		if(sede != null && sede.smDssitioweb != undefined) {
		   sede.smDssitioweb			= null;
		}
		if(sede != null && sede.smDsdireccion != undefined) {
		   sede.smDsdireccion			= null;
		}
		
		$scope.pais						= null;
		$scope.departamentos 			= [];
		$scope.ciudades				 	= [];
		$scope.instituciones			= [];
		$scope.sedes					= [];
		
		$scope.titulo_mensajes 			= "Información!";
		$scope.descripcion_mensajes  	= "En esta vista puede administrar las sedes";
		divMessages.className 			= "alert alert-info alert-dismissable";
	};


	$scope.buscarPais 					= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.paises,
			function(valor, item) {
				return (valor == item.scpais);
			});
	}
	
	$scope.buscarDepartamento 	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.departamentos,
			function(valor, item) {
				return (valor == item.scdepartamento);
			});
	}
	
	$scope.buscarCiudad 		= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.ciudades,
			function(valor, item) {
				return (valor == item.scciudad);
			});
	}
	
	$scope.buscarInstitucion	= function(codigo) {
		return $scope.buscarItem(
			codigo, 
			$scope.instituciones,
			function(valor, item) {
				return (valor == item.scinstitucion);
			});
	}
	
	$scope.buscarElemento		= function(id,lista) {
		var posicion 			= $scope.buscarItem(id, lista,
			function(valor, item) {
				return (valor == item.scdatmestro);
			});
		return ((lista != null && lista.length > 0 && posicion != -1)?lista[posicion]:null);
	};
	
	$scope.buscarItem		  	= function() {
		var valor				= arguments[0];
		var lista				= arguments[1];
		var comparator			= arguments[2];
		var posicion			= -1;
		
		if(lista != null && lista.length > 0) {
			for(var index= 0; index < lista.length; index++) {
				if(comparator(valor, lista[index])) {
					posicion 	= index;
					break;
				}
			}
		}
		return posicion;
	};
	
	$scope.cargarPaises 				= function() {
		try{
			var exito 					= function(respuesta){
				try{
					var paises 			= angular.fromJson(respuesta.data);
					$scope.paises.push({dspais : 'Seleccionar' , copais : null});
					$.each(paises, function( index , pais ) {
						$scope.paises.push(pais);
				    });
				}catch(e){
					console.log(e.message);
				}
			};
			var error	 					= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			smartOlwServices.sendGet(hostSmart+context+endPointPais+methodGetAllPais,exito,error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes 	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarDepartamentos 				= function() {
		var paisObj							= arguments[0];
		var pais							= (paisObj != null)?paisObj:$scope.pais;
		var departamento 					= {scpais : {scpais : pais}};
		try{
			var exito 						= function(respuesta){
				try{
					$scope.departamentos 	= [];
					var departamentos 		= angular.fromJson(respuesta.data);
					$scope.departamentos.push({dsdepartamento : 'Seleccionar' , scdepartamento : null});
					$.each(departamentos, function( index , departamento ) {
						$scope.departamentos.push(departamento);
				    });
				}catch(e){
					console.log(e.message);
				}
			};
			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de departamentos";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de paises";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarCiudades 					= function() {
		var departamentoVal					= arguments[0];
		var indepart	  					= $scope.buscarDepartamento(departamentoVal);
		var cdepart		  					= $scope.departamentos[indepart];
		var ciudadDTO  	  					= {departamentodto : cdepart};
		try{
			var exito 	  					= function(respuesta){
				try{
					var ciudades 			= angular.fromJson(respuesta.data);
					$scope.ciudades 		= [];
					$scope.ciudades.push({dsciudad : 'Seleccionar' , scciudad : null});
					$.each(ciudades, function( index , ciudad ) {
						$scope.ciudades.push(ciudad);
				    });
				}catch(e){
					console.log(e.message);
				}
			};
			var error 						= function(respuesta){
				$scope.titulo_mensajes 		= "Error!";
				$scope.descripcion_mensajes = "Se produjo un error al momento de consultar la información de ciudades";
				divMessages.className 		= "alert alert-danger alert-dismissable";
				console.log(angular.toJson(respuesta));
			};
			
			smartOlwServices.sendPost(
				angular.toJson(ciudadDTO),
				hostSmart+context+endPointCiudad+methodGetCiudad,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};
	
	
	$scope.cargarInstitucion 				= function(ciudad){
			var postMethod					= (arguments.length > 1)?arguments[1]:null;
		try {
			var ciudadObj					= $scope.buscarCiudad(ciudad);
				ciudadObj					= $scope.ciudades[ciudadObj];
			var institucion 				= {ciudaddto:ciudadObj};
			var exito 						= function(respuesta){
				try{
					$scope.instituciones 	= [];
					var instituciones 		= angular.fromJson(respuesta.data);
					$scope.instituciones.push({dsinstitucion : 'Seleccionar' , scinstitucion : null});
					$.each(instituciones, function( index , institucion ) {
						$scope.instituciones.push(institucion);
					});
					if(postMethod != null) {
					   postMethod($scope);
					}
				}catch(e){
					console.log(e.message);
				}
			};
			var error 							= function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de las instituciones";
				divMessages.className 			= "alert alert-danger alert-dismissable";
			};
			
			smartOlwServices.sendPost(
					angular.toJson(institucion),	
					hostSmart+context+endPointInstitucion+methodGetInstitucion,
					exito,
					error);

		} catch (e) {
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de las instituciones";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	};

	$scope.cargarMaestros 					= function(){

		try {

			var exito 						= function(respuesta){
				try{
					$scope.tipoZona 		= new Array();
					$scope.tipoUbicacion 	= new Array();

					var maestroZona 		= angular.fromJson(respuesta.data.listatipozona);
					var maestroUbicacion 	= angular.fromJson(respuesta.data.listatipoubicacion);

					$scope.tipoZona.push({dsdatmaestro : 'Seleccionar' , scdatmestro : null});
					$.each(maestroZona, function( index , tipozona ) {
						$scope.tipoZona.push(tipozona);
					});

					$scope.tipoUbicacion.push({dsdatmaestro : 'Seleccionar' , scdatmestro : null});
					$.each(maestroUbicacion, function( index , tipoubicacion ) {
						$scope.tipoUbicacion.push(tipoubicacion);
					});

					$scope.cargarPaises();

				}catch(e){
					alert(e.message);
				}

			}

			var error = function(respuesta){

				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al cargar los maestros iniciales";
				divMessages.className 			= "alert alert-danger alert-dismissable";
			}
			smartOlwServices.sendGet(
					hostSmart+context+endPointCargaInicial+methodCargaInicial,
					exito,
					error);

		} catch (e) {
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al cargar los maestros iniciales";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}

	}

	/**
	 * Carga inicial y eventos de onChange
	 */
	$scope.cargarMaestros();


});